package com.learn.adapter;

import com.learn.adapter.class_adapter.Adapter;
import com.learn.adapter.class_adapter.Adaptee;
import com.learn.adapter.class_adapter.Target;
import com.learn.adapter.composition_adapter.Adaptee2;
import com.learn.adapter.composition_adapter.Adapter2;
import lombok.extern.slf4j.Slf4j;

/**
 * <p>项目名称: design-pattern </p>
 *
 * <p>文件名称: App </p>
 *
 * 适配器模式:
 *        把一个类的接口{@link Adaptee}变换成客户端所期待的另一种接口{@link Target}，
 *        从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
 *
 * 两种模式：
 *          类的适配器模式（class_adapter）
 *          对象的适配器模式(composition_adapter)
 *
 *  三种角色：
 *       目标(Target)角色：这就是所期待得到的接口。注意：由于这里讨论的是类适配器模式，因此目标不可以是类。
 *       源(Adaptee)角色：现在需要适配的接口。
 *       适配器(Adapter)角色：适配器类是本模式的核心。适配器把源接口转换成目标接口。显然，这一角色不可以是接口，而必须是具体类。
 */
@Slf4j
public class App {

    public static void main(String[] args) {
        // 类的适配器模式
        Adapter adapter = new Adapter();
        adapter.work();
        adapter.talk();

        log.error("-------------------------------------");

        //对象的适配器模式
        Adapter2 adapter2 = new Adapter2(new Adaptee2());
        adapter2.work();
        adapter2.talk();
    }
}
